// 导入axios模块
import axios from "axios";

// 导入 store 模块
import store from "@/store";

// 导入Message消息提示函数
import { Message } from "element-ui";

// 导入router实例
import router from "@/router";
// 创建 axios实例
const request = axios.create({
  // 基地址
  // 去自己的服务器不用写基地址
  baseURL: process.env.VUE_APP_BASE_API,
  // 超时时间
  timeout: 5000,
});
// 请求拦截器
request.interceptors.request.use(
  (config) => {
    const { token } = store.state.user;
    if (token) {
      // 通过请求头携带给后台，给headers添加Authorization属性
      config.headers.Authorization = `Bearer ${token}`;
    }
    return config;
  },
  (error) => Promise.reject(error)
);
// 响应拦截器
request.interceptors.response.use(
  (resp) => {
    const { data } = resp;
    if (data.success) {
      // 请求成功
      return data;
    }
    return Promise.reject(data);
  },
  async (err) => {
    const { status, data } = err.response;
    if (status === 401 && data.code === 10002) {
      // 提示用户
      Message.error("登录过期、请重新登录");
      // 清空Vuex中的token和用户信息
      await store.dispatch("user/loginutAction");
      // 跳转登录 ，并携带回调地址
      router.replace(`/login?redirectUrl=${router.currentRoute.path}`);
    }
    return Promise.reject(err);
  }
);
// 导出实例
export default request;
